Socket Programming-এ ক্লায়েন্ট এবং সার্ভার উভয়কেই Socket ব্যবহার করে নেটওয়ার্কে যোগাযোগ স্থাপন করতে হয়। নিচে TCP (Transmission Control Protocol) ব্যবহার করে একটি সাধারণ ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশন উদাহরণ দেখানো হয়েছে, যেখানে সার্ভার একটি নির্দিষ্ট পোর্টে সংযোগ গ্রহণ করে এবং ক্লায়েন্ট সেই সার্ভারের সাথে সংযোগ স্থাপন করে ডেটা আদান-প্রদান করে।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[1024] = {0};
char *hello = "Hello from server";
// 1. Socket তৈরি করা
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 2. সার্ভার ঠিকানা সেটআপ করা
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT);
// 3. Binding করা
if (bind(server_fd, (struct sockaddr*)&address, sizeof(address)) < 0) {
perror("Bind failed");
exit(EXIT_FAILURE);
}
// 4. Listening করা
if (listen(server_fd, 3) < 0) {
perror("Listen failed");
exit(EXIT_FAILURE);
}
printf("Server is listening on port %d\n", PORT);
// 5. Accepting সংযোগ
if ((new_socket = accept(server_fd, (struct sockaddr*)&address, (socklen_t*)&addrlen)) < 0) {
perror("Accept failed");
exit(EXIT_FAILURE);
}
// 6. ডেটা গ্রহণ করা
read(new_socket, buffer, 1024);
printf("Client: %s\n", buffer);
// 7. ডেটা পাঠানো
send(new_socket, hello, strlen(hello), 0);
printf("Hello message sent to client\n");
// 8. Socket বন্ধ করা
close(new_socket);
close(server_fd);
return 0;
}
TCP ক্লায়েন্ট প্রোগ্রাম উদাহরণ (C ভাষায়)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#define PORT 8080
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char *hello = "Hello from client";
char buffer[1024] = {0};
// 1. Socket তৈরি করা
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
printf("Socket creation failed\n");
return -1;
}
// 2. সার্ভার ঠিকানা সেটআপ করা
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 3. IP Address সেট করা
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {
printf("Invalid address or Address not supported\n");
return -1;
}
// 4. সার্ভারের সাথে সংযোগ স্থাপন করা
if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
printf("Connection Failed\n");
return -1;
}
// 5. ডেটা পাঠানো
send(sock, hello, strlen(hello), 0);
printf("Hello message sent to server\n");
// 6. ডেটা গ্রহণ করা
read(sock, buffer, 1024);
printf("Server: %s\n", buffer);
// 7. Socket বন্ধ করা
close(sock);
return 0;
}
Socket তৈরি:
socket()
System Call ব্যবহার করে সার্ভার Socket তৈরি করা হয়, যা AF_INET
(IPv4) এবং SOCK_STREAM
(TCP) ব্যবহার করে।Binding:
bind()
ফাংশন সার্ভার Socket-কে একটি নির্দিষ্ট IP Address এবং Port Number (8080
) এর সাথে সংযুক্ত করে, যাতে এটি ইনকামিং সংযোগ গ্রহণ করতে পারে।Listening:
listen()
ফাংশন সার্ভার Socket-কে ইনকামিং সংযোগ গ্রহণের জন্য অপেক্ষা করতে প্রস্তুত করে। এখানে 3
প্যারামিটারটি ব্যাকলগ নির্দেশ করে, যা সার্ভার কতটি ইনকামিং সংযোগ কিউতে রাখতে পারবে।Accepting সংযোগ:
accept()
ফাংশন ব্যবহার করে ইনকামিং সংযোগ গ্রহণ করা হয় এবং একটি নতুন Socket তৈরি করা হয়, যা ক্লায়েন্টের সাথে ডেটা ট্রান্সফারের জন্য ব্যবহৃত হয়।ডেটা পাঠানো এবং গ্রহণ:
read()
এবং send()
ফাংশন ব্যবহার করে ক্লায়েন্ট থেকে ডেটা গ্রহণ এবং ক্লায়েন্টে ডেটা পাঠানো হয়।Socket বন্ধ করা:
close()
ফাংশন ব্যবহার করে সার্ভার এবং ক্লায়েন্ট Socket বন্ধ করা হয়।Socket তৈরি:
socket()
System Call ব্যবহার করে ক্লায়েন্ট Socket তৈরি করা হয়।সার্ভারের ঠিকানা সেটআপ:
inet_pton()
ফাংশন ব্যবহার করে সার্ভারের IP Address (127.0.0.1
, যা localhost) এবং Port Number (8080
) সেট করা হয়।সার্ভারের সাথে সংযোগ স্থাপন:
connect()
ফাংশন ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করা হয়।ডেটা পাঠানো এবং গ্রহণ:
send()
এবং read()
ফাংশন ব্যবহার করে ক্লায়েন্ট ডেটা পাঠায় এবং সার্ভার থেকে ডেটা গ্রহণ করে।Socket বন্ধ করা:
close()
ফাংশন ব্যবহার করে ক্লায়েন্ট Socket বন্ধ করা হয়।common.read_more